package pruebas

import org.junit._
import Assert._
import scala.collection.mutable.ListBuffer

@Test
class PruebaSum {
    @Test
    def sumaTest() = {
      var caja1 = new Caja(3)
      var caja2 = new Caja(8)
      var cajaS = caja1 + caja2
      assertTrue(cajaS.valor.equals(11))
    }
  
    @Test
    def sumListTest() = {
      var caja1 = new Caja(3)
      var caja2 = new Caja(8)
      var cajaS = caja1 + caja2
      var listado1 : ListBuffer[Caja] = new ListBuffer[Caja]()
      listado1 append caja1
      listado1 append caja2
      listado1 append cajaS
      
      var cajaResultado: Caja = listado1.foldLeft(Caja.zero)(Caja.plus)
      
      assertTrue(cajaS.valor.equals(11))
    }
}


object Caja {
  def plus (other: Caja, another: Caja) : Caja = {
    new Caja(other.valor + another.valor)
  }
  def zero () : Caja = {
    new Caja(0)
  }
}


class Caja(valorP: Integer) {
  var valor = valorP  
  def plus (other: Caja) : Caja = {
    new Caja(other.valor + this.valor)
  }
  def + (other: Caja) = plus(other: Caja)
  
  def zero () : Caja = {
    new Caja(0)
  }  
  override def toString():String = {
    "Caja - valor: [" + this.valor + "]"
  }
}

